#ifndef __COORDF_H__
#define __COORDF_H__

#include <GL/gl.h>
#include <math.h>

#define PIOVER180 0.0174532925

/*
 * Classe: CoordF
 *
 *   Coordenadas (X, Y, Z) com sobrecarga de operadores para facilitar manuseio
 *
*/

class CoordF
{
      private:
              GLfloat toRadians ( GLfloat angle ) { return (angle * PIOVER180); }
      public:
             GLfloat x, y, z;
             
             CoordF();
             CoordF(GLfloat nx, GLfloat ny, GLfloat nz);
             CoordF(GLfloat nx, GLfloat ny);
             ~CoordF();
             
             CoordF operator +(const CoordF &a);
             CoordF operator -(const CoordF &a);
             CoordF operator *(const GLfloat &a);
             CoordF operator /(const GLfloat &a);
             CoordF& CoordF::operator +=(const CoordF &v);
             CoordF& CoordF::operator -=(const CoordF &v);
             CoordF& CoordF::operator *=(const GLfloat &f);
             CoordF& CoordF::operator /=(const GLfloat &f);
             
             GLfloat dot(const CoordF &a); // Produto escalar
             GLfloat len2(); // Quadrado do comprimento do vetor (0,0,0)->(x,y,z)
             GLfloat len();  // Comprimento do vetor (0,0,0)->(x,y,z)
             
             void normalize(); // Normaliza o vetor (0,0,0)->(x,y,z) (reduz a comprimento 1)
             
             void rotateInX( GLfloat angle );
             void rotateInY( GLfloat angle );
             void rotateInZ( GLfloat angle );
};

#endif
